<!DOCTYPE html>
<html lang="en">
<head>
    <meta  http-equiv="content-type" content="text/html" charset="utf-8"/>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript">
     //Object.getPrototypeOf:根据实例对象获得原型对象
        function Person(){

        }
        Person.prototype.name = 'z3';
        Person.prototype.age = 20;
        Person.prototype.sayName = function(){
            alert('我是原型方法');
        }
        var p1 = new Person();
        var objPrototype = Object.getPrototypeOf(p1);//根据实例对象获得原型对象

     /**
      * 读取对象属性的时候，会先搜索实例对象；如果没有，再去实例所对应的原型对象中搜索，
      * 有就返回，如果没有，返回undefined
      * 就想获得原型对象中的属性，可以把实例对象中的属性删除
      * 一般在原型对象中做一些初始化的工作。
      * @type {Person}
      */
     var p2 = new Person();
     p2.name = 'w5';
     alert(p2.name);

     /**
      * 判断一个属性是原型还是实例的属性
      */

        var p3 = new Person();
        p3.hasOwnProperty('name');//false     因为name是属于原型的

     /**
      * in操作符判断属性是否存在于原型或者实例对象中
      */
        var p4 = new Person();
        alert('name' in p4);//true
        var p5 = new Person();
        p5.name = 'w4';
        alert('name' in p4);//true
     /**
      * 判断一个属性是否存在原型对象中
      *  ！p3.hasOwnProperty('name') && 'name' in p3
      */

     /**
      * ECMA5新特性：Object.keys();//返回所有的属性（是一个数组）
      */

     /**
      * ECMA5新特性：constructor属性是不能被枚举的  ---> 不能被枚举的属性[eable = false]
      * Object.getOwnPropertyNames() 枚举对象的所有属性，无论是不是能枚举的属性
      */

     /**
      * isPrototypeOf(new instance):判断原型的方法
      */

    </script>
</head>
<body>

</body>
</html>